65 二叉树中属性操作的实现
二叉树中属性操作的实现(一)
-
二叉树的属性操作
-
二叉树中结点的数目
- 定义功能:count(node)
- 在node为根结点的二叉树中统计结点数目
- 定义功能:count(node)
编程实验(一)
-
二叉树中结点的数目
二叉树中属性操作的实现(二)
-
二叉树的高度
- 定义功能:height(node)
- 获取node为根结点的二叉树的高度
- 定义功能:height(node)
编程实验(二)
-
二叉树的高度
二叉树中属性操作的实现(三)
-
树的度数
- 定义功能:degree(node)
- 获取node为根结点的二叉树的度数
- 定义功能:degree(node)
编程实验(三)
-
二叉树的度数
思考:如何遍历BTree(二叉树结构)的每一个结点?
66 二叉树结构的层次遍历
二叉树结构的层次遍历
-
二叉树的遍历 二叉树的遍历(Traversing Binary Tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。
-
需要考虑的问题 通用树结构的层次遍历算法是否可以用在二叉树结构上?如果可以,代码需要做怎样的改动?
-
设计思路(游标) 提供一组遍历相关的函数,按层次访问二叉树中的数据元素。
函数 功能说明 begin() 初始化,准备进行遍历访问 next() 移动游标,指向下一个结点 current() 获取游标所指向的数据元素 end() 判断游标是否到达尾部 -
层次遍历算法
- 原料:
class LinkQueue<T>;
- 游标:
LinkQueue<T>::front();
- 思想:
- begin()→将根结点压入队列中
- current()→访问队头元素指向的数据元素
- next()→队头元素弹出,将队头元素的孩子压入栈中(核心)
- end()→判断队列是否为空
- 原料:
-
层次遍历算法示例
函数调用 队列状态 出队结点 begin() 1 next() 2,3 1 next() 3,4,5 2 next() 4,5,6,7 3 next() 5,6,7,8,9 4 next() 6,7,8,9,10 5 next() 7,8,9,10 6 next() 8,9,10 7 next() 9,10 8 ... ... ...
编程实验
-
二叉树的层次遍历
-
To be continued ...
思考:BinaryTree(二叉树结构)是否只有一种遍历的方法?